ANY and ALL

عملگرهای ANY و ALL به شما این امکان را می دهند که مقایسه ای بین یک مقدار ستون و طیفی از مقادیر دیگر انجام دهید.

اپراتور ANY:

    در نتیجه یک مقدار بولی برمی گرداند
    اگر هر یک از مقادیر فرعی شرایط را برآورده کند، TRUE را برمی گرداند

ANY به این معنی است که اگر عملیات برای هر یک از مقادیر موجود در محدوده درست باشد، شرط درست خواهد بود.

اپراتور ALL:

    در نتیجه یک مقدار بولی برمی گرداند
    اگر همه مقادیر فرعی شرایط را برآورده کنند، TRUE را برمی گرداند
    با دستورات SELECT، WHERE و HAVING استفاده می شود

ALL به این معنی است که شرط فقط در صورتی درست خواهد بود که عملیات برای همه مقادیر در محدوده درست باشد.

در زیر منتخبی از جدول "محصولات" در پایگاه داده نمونه Northwind آمده است:

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18
2Chang1124 - 12 oz bottles19
3Aniseed Syrup1212 - 550 ml bottles10
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22
5Chef Anton's Gumbo Mix2236 boxes21.35
6Grandma's Boysenberry Spread3212 - 8 oz jars25
7Uncle Bob's Organic Dried Pears3712 - 1 lb pkgs.30
8Northwoods Cranberry Sauce3212 - 12 oz jars40
9Mishi Kobe Niku4618 - 500 g pkgs.97

و یک انتخاب از جدول "جزئیات سفارش":

OrderDetailIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
410249149
5102495140
6102504110
7102505135
8102506515
910251226
10102515715

نمونه های SQL ANY

دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails مقداری برابر با 10 دارد، ProductName را فهرست می‌کند (این مقدار TRUE را برمی‌گرداند زیرا ستون Quantity دارای مقادیری 10 است):

SELECT ProductName
FROM Products
WHERE ProductID = ANY
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity = 10); 

دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails دارای مقداری بزرگتر از 99 باشد، ProductName را فهرست می‌کند (به دلیل اینکه ستون Quantity مقادیری بزرگتر از 99 دارد، این مقدار TRUE را برمی‌گرداند):

SELECT ProductName
FROM Products
WHERE ProductID = ANY
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 99); 

دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails دارای مقدار بزرگتر از 1000 باشد، ProductName را فهرست می‌کند (این مقدار FALSE را برمی‌گرداند زیرا ستون Quantity مقادیر بزرگ‌تر از 1000 ندارد):

SELECT ProductName
FROM Products
WHERE ProductID = ANY
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 1000); 

SQL ALL Examples

عبارت SQL زیر همه نام‌های محصول را فهرست می‌کند:

SELECT ALL ProductName
FROM Products
WHERE TRUE; 

اگر تمام رکوردهای جدول OrderDetails مقدار برابر با 10 داشته باشند، عبارت SQL زیر، ProductName را فهرست می‌کند.

SELECT ProductName
FROM Products
WHERE ProductID = ALL
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity = 10);